home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 4 / Apprentice-Release4.iso / Languages / Oberon⁄F™ 1.1 / Obx / Mod / Wrappers (.txt) < prev   
Encoding:
Oberon Document  |  1995-08-30  |  4.5 KB  |  132 lines  |  [oODC/obnF]

  1. Documents.StdDocumentDesc
  2. Documents.DocumentDesc
  3. Containers.ViewDesc
  4. Views.ViewDesc
  5. Stores.StoreDesc
  6. Documents.ModelDesc
  7. Containers.ModelDesc
  8. Models.ModelDesc
  9. Stores.ElemDesc
  10. TextViews.StdViewDesc
  11. TextViews.ViewDesc
  12. TextModels.StdModelDesc
  13. TextModels.ModelDesc
  14. TextModels.AttributesDesc
  15. Helvetica
  16. Helvetica
  17. Helvetica
  18. Helvetica
  19. Helvetica
  20. MODULE ObxWrappers;
  21.     IMPORT Dialog, Stores, Models, Views, Controllers, Properties, Out;
  22.     CONST minVersion = 0; maxVersion = 1;
  23.     TYPE
  24.         View = POINTER TO RECORD (Views.ViewDesc)
  25.             v: Views.View
  26.         END;
  27.     PROCEDURE (v: View) Internalize (VAR rd: Stores.Reader);
  28.         VAR s: Stores.Store; thisVersion: SHORTINT;
  29.     BEGIN
  30.         v.Internalize^(rd);
  31.         IF ~rd.cancelled THEN
  32.             rd.ReadVersion(minVersion, maxVersion, thisVersion);
  33.             IF ~rd.cancelled THEN
  34.                 rd.ReadStore(s); v.v := s(Views.View)
  35.             END
  36.         END
  37.     END Internalize;
  38.     PROCEDURE (v: View) Externalize (VAR wr: Stores.Writer);
  39.     BEGIN
  40.         v.Externalize^(wr);
  41.         wr.WriteVersion(maxVersion);
  42.         wr.WriteStore(v.v)
  43.     END Externalize;
  44.     PROCEDURE (v: View) CopyFrom (source: Views.View);
  45.         VAR st: Stores.Store;
  46.     BEGIN
  47.         WITH source: View DO
  48.             st := Stores.Clone(source.v); v.v := st(Views.View);
  49.             v.v.CopyFrom(source.v)
  50.         END
  51.     END CopyFrom;
  52.     PROCEDURE (v: View) InitModel (model: Models.Model);
  53.     BEGIN
  54.         v.v.InitModel(model)
  55.     END InitModel;
  56.     PROCEDURE (v: View) ThisModel (): Models.Model;
  57.     BEGIN
  58.         RETURN v.v.ThisModel()
  59.     END ThisModel;
  60.     PROCEDURE (v: View) Flush;
  61.     BEGIN
  62.         v.Flush
  63.     END Flush;
  64.     PROCEDURE (v: View) InitContext (context: Models.Context);
  65.     BEGIN
  66.         v.InitContext^(context);
  67.         v.v.InitContext(context)    (* wrapper and wrapped view share the same context *)
  68.     END InitContext;
  69.     PROCEDURE (v: View) ConsiderFocusRequestBy (view: Views.View);
  70.     BEGIN
  71.         v.v.ConsiderFocusRequestBy(view)
  72.     END ConsiderFocusRequestBy;
  73.     PROCEDURE (v: View) Neutralize;
  74.     BEGIN
  75.         v.v.Neutralize
  76.     END Neutralize;
  77.     (* NewFrame: wrapper uses standard frame *)
  78.     (* Background: wrapper has no intrinsic background color *)
  79.     PROCEDURE (v: View) Restore (f: Views.Frame; l, t, r, b: LONGINT);
  80.     BEGIN
  81.         Views.InstallFrame(f, v.v, 0, 0, 0, TRUE)
  82.     END Restore;
  83.     (* RestoreMarks: wrapper has no intrinsic marks, wrapped view's RestoreMarks is called by framework *)
  84.     (* HandleModelMsg: framework performs message propagation *)
  85.     (* HandleViewMsg: framework performs message propagation *)
  86.     PROCEDURE (v: View) HandleCtrlMsg (f: Views.Frame; VAR msg: Controllers.Message; VAR focus: Views.View);
  87.     BEGIN
  88.         WITH msg: Controllers.EditMsg DO
  89.             (* sample special behavior: copy typing into log *)
  90.             IF msg.op = Controllers.pasteChar THEN Out.Char(msg.char); Out.Ln END    
  91.         ELSE
  92.         END;
  93.         focus := v.v    (* forward all controller messages to wrapped view *)
  94.     END HandleCtrlMsg;
  95.     PROCEDURE (v: View) HandlePropMsg (VAR msg: Properties.Message);
  96.     BEGIN
  97.         Views.HandlePropMsg(v.v, msg)
  98.     END HandlePropMsg;
  99.     PROCEDURE Wrap*;
  100.         VAR poll: Controllers.PollOpsMsg; w: View; replace: Controllers.ReplaceViewMsg;
  101.     BEGIN
  102.         Controllers.PollOps(poll);
  103.         IF (poll.singleton # NIL) & ~(poll.singleton IS View) THEN
  104.             NEW(w); w.v := poll.singleton;
  105.             replace.old := poll.singleton; replace.new := w;
  106.             Controllers.Forward(replace)
  107.         ELSE Dialog.Beep
  108.         END
  109.     END Wrap;
  110.     PROCEDURE Unwrap*;
  111.         VAR poll: Controllers.PollOpsMsg; replace: Controllers.ReplaceViewMsg;
  112.     BEGIN
  113.         Controllers.PollOps(poll);
  114.         IF (poll.singleton # NIL) & (poll.singleton IS View) THEN
  115.             replace.old := poll.singleton; replace.new := poll.singleton(View).v;
  116.             Controllers.Forward(replace)
  117.         ELSE Dialog.Beep
  118.         END
  119.     END Unwrap;
  120. END ObxWrappers.
  121. TextControllers.StdCtrlDesc
  122. TextControllers.ControllerDesc
  123. Containers.ControllerDesc
  124. Controllers.ControllerDesc
  125. TextRulers.StdRulerDesc
  126. TextRulers.RulerDesc
  127. TextRulers.StdStyleDesc
  128. TextRulers.StyleDesc
  129. TextRulers.AttributesDesc
  130. Helvetica
  131. Documents.ControllerDesc
  132.